package com.car.merge.fun.sdk.utils;


import android.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class CarMFUtils {

    // 固定密钥（必须是 16/24/32 字节）
    private static final String SECRET_KEY = "sweEgsdFTjytgURf"; // 16 字节
    private static final String INIT_VECTOR = "RandomInitVector"; // 16 字节

    /**
     * 加密方法
     *
     * @param plainText 需要加密的明文
     * @return 加密后的 Base64 编码字符串
     */
    public static String encrypt(String plainText) {
        try {
            // 将固定字符串转换为密钥
            SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET_KEY.getBytes(), "AES");
            IvParameterSpec ivParameterSpec = new IvParameterSpec(INIT_VECTOR.getBytes());

            // 初始化 Cipher
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);

            // 加密
            byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
            return Base64.encodeToString(encryptedBytes, Base64.DEFAULT); // 使用 Android 的 Base64
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 解密方法
     *
     * @param encryptedText 加密后的 Base64 编码字符串
     * @return 解密后的明文
     */
    public static String decrypt(String encryptedText) {
        try {
            // 将固定字符串转换为密钥
            SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET_KEY.getBytes(), "AES");
            IvParameterSpec ivParameterSpec = new IvParameterSpec(INIT_VECTOR.getBytes());

            // 初始化 Cipher
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);

            // 解密
            byte[] decryptedBytes = cipher.doFinal(Base64.decode(encryptedText, Base64.DEFAULT)); // 使用 Android 的 Base64
            return new String(decryptedBytes);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

}
